package br.com.bancoeXtreme.tratadoresxml;

//import java.io.BufferedReader;
//import java.io.FileNotFoundException;
//import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
//import java.text.DateFormat;
//import java.text.SimpleDateFormat;
import java.util.Date;

import br.com.bancoeXtreme.transacoes.cliente.*;

public class GeradorTransacaoClienteXML {
	//private TransacaoCliente transacaoCliente;
	private String basePath = "./Out/";
	//private String specificPath;
	
	
	
	
	public String geraTransacaoClienteExtratoPorPeriodo(TransacaoClienteExtratoPorPeriodo transacaoCliente){
		String xmlOutput = "";
		
		xmlOutput += "<transacao>\n\t"
					+ "<dataTransacao>" + transacaoCliente.getData() + "</dataTransacao>\n\t"
					+ "<tipo>" + transacaoCliente.getTipo() + "</tipo>\n\t"
					+ "<numeroAgenciaDesteCliente>" + transacaoCliente.getNumeroAgenciaDesteCliente() + "</numeroAgenciaDesteCliente>\n\t"
					+ "<numeroContaDesteCliente>" + transacaoCliente.getNumeroContaDesteCliente() + "</numeroContaDesteCliente>\n\t"
					+ "<dataInicioExtrato>" + transacaoCliente.getDataInicio() + "</dataFimExtrato>\n\t"
					+ "<dataFimExtrato>" + transacaoCliente.getDataFim() + "</dataFimExtrato>\n"
					+ "</transacao>";
						
		return xmlOutput;
	}
	
	public String geraTransacaoClienteLogin(TransacaoClienteLogin transacaoCliente){
		String xmlOutput = "";
		
		xmlOutput += "<transacao>\n\t"
					+ "<dataTransacao>" + transacaoCliente.getData() + "</dataTransacao>\n\t"
					+ "<tipo>" + transacaoCliente.getTipo() + "</tipo>\n\t"
					+ "<numeroAgenciaDesteCliente>" + transacaoCliente.getNumeroAgenciaDesteCliente() + "</numeroAgenciaDesteCliente>\n\t"
					+ "<numeroContaDesteCliente>" + transacaoCliente.getNumeroContaDesteCliente() + "</numeroContaDesteCliente>\n\t"
					+ "<senha>" + transacaoCliente.getSenha() + "</senha>\n"
					+ "</transacao>";
		
		return xmlOutput;
	}
	
	public String geraTransacaoClientePagamentoContasConsumo(TransacaoClientePagamentoContasConsumo transacaoCliente) {
		String xmlOutput = "";
			
		xmlOutput += "<transacao>\n\t"
					+ "<dataTransacao>" + transacaoCliente.getData() + "</dataTransacao>\n\t"
					+ "<tipo>" + transacaoCliente.getTipo() + "</tipo>\n\t"
					+ "<numeroAgenciaDesteCliente>" + transacaoCliente.getNumeroAgenciaDesteCliente() + "</numeroAgenciaDesteCliente>\n\t"
					+ "<numeroContaDesteCliente>" + transacaoCliente.getNumeroContaDesteCliente() + "</numeroContaDesteCliente>\n\t"
					+ "<concessionaria>" + transacaoCliente.getConcessionaria() + "</concessionaria>\n\t"
					+ "<codigoBarras>" + transacaoCliente.getCodigoBarras() + "</codigoBarras>\n\t"
					+ "<valorDocumento>" + transacaoCliente.getValorDocumento() + "</valorDocumento>\n"
					+ "</transacao>";
	
		return xmlOutput;
	}
	
	public String geraTransacaoClientePagamentoTitulos(TransacaoClientePagamentoTitulos transacaoCliente){
		String xmlOutput = "";
		
		xmlOutput += "<transacao>\n\t"
					+ "<dataTransacao>" + transacaoCliente.getData() + "</dataTransacao>\n\t"
					+ "<tipo>" + transacaoCliente.getTipo() + "</tipo>\n\t"
					+ "<numeroAgenciaDesteCliente>" + transacaoCliente.getNumeroAgenciaDesteCliente() + "</numeroAgenciaDesteCliente>\n\t"
					+ "<numeroContaDesteCliente>" + transacaoCliente.getNumeroContaDesteCliente() + "</numeroContaDesteCliente>\n\t"
					+ "<codigoBarras>" + transacaoCliente.getCodigoBarras() + "</codigoBarras>\n\t"
					+ "<valorDocumento>" + transacaoCliente.getValorDocumento() + "</valorDocumento>\n\t"
					+ "<desconto>" + transacaoCliente.getDesconto() + "</desconto>\n\t"
					+ "<outrasDeducoes>" + transacaoCliente.getOutrasDeducoes() + "</outrasDeducoes>\n\t"
					+ "<juros>" + transacaoCliente.getJuros() + "</juros>\n\t"
					+ "<outrosAcrescimos>" + transacaoCliente.getOutrosAcrescimos() + "</outrosAcrescimos>\n\t"
					+ "<valorCobrado>" + transacaoCliente.getValorCobrado() + "</valorCobrado>\n"
					+ "</transacao>";
		
		return xmlOutput;
	}
	
	public String geraTransacaoClienteSaldo(TransacaoClienteSaldo transacaoCliente) {
		String xmlOutput = "";
		
		xmlOutput += "<transacao>\n\t"
					+ "<dataTransacao>" + transacaoCliente.getData() + "</dataTransacao>\n\t"
					+ "<tipo>" + transacaoCliente.getTipo() + "</tipo>\n\t"
					+ "<numeroAgenciaDesteCliente>" + transacaoCliente.getNumeroAgenciaDesteCliente() + "</numeroAgenciaDesteCliente>\n\t"
					+ "<numeroContaDesteCliente>" + transacaoCliente.getNumeroContaDesteCliente() + "</numeroContaDesteCliente>\n"
					+ "</transacao>";
	
		return xmlOutput;
	}
	
	public String geraTransacaoClienteTransferenciaMesmoBanco(TransacaoClienteTransferenciaMesmoBanco transacaoCliente) {
		String xmlOutput = "";
		
		xmlOutput += "<transacao>\n\t"
					+ "<dataTransacao>" + transacaoCliente.getData() + "</dataTransacao>\n\t"
					+ "<tipo>" + transacaoCliente.getTipo() + "</tipo>\n\t"
					+ "<numeroAgenciaDesteCliente>" + transacaoCliente.getNumeroAgenciaDesteCliente() + "</numeroAgenciaDesteCliente>\n\t"
					+ "<numeroContaDesteCliente>" + transacaoCliente.getNumeroContaDesteCliente() + "</numeroContaDesteCliente>\n\t"
					+ "<numeroAgenciaDestino>" + transacaoCliente.getNumeroAgenciaDestino() + "</numeroAgenciaDestino>\n\t"
					+ "<numeroContaDestino>" + transacaoCliente.getNumeroContaDestino() + "</numeroContaDestino>\n\t"
					+ "<valor>" + transacaoCliente.getValor() + "</valor>\n"
					+ "</transacao>";
		
		return xmlOutput;
	}
	
	public String geraTransacaoClienteTransferenciaOutroBanco(TransacaoClienteTransferenciaOutroBanco transacaoCliente) {
		String xmlOutput = "";
		
		xmlOutput += "<transacao>\n\t"
					+ "<dataTransacao>" + transacaoCliente.getData() + "</dataTransacao>\n\t"
					+ "<tipo>" + transacaoCliente.getTipo() + "</tipo>\n\t"
					+ "<numeroAgenciaDesteCliente>" + transacaoCliente.getNumeroAgenciaDesteCliente() + "</numeroAgenciaDesteCliente>\n\t"
					+ "<numeroContaDesteCliente>" + transacaoCliente.getNumeroContaDesteCliente() + "</numeroContaDesteCliente>\n\t"
					+ "<bancoDestino>" + transacaoCliente.getBancoDestino() + "</bancoDestino>\n\t"
					+ "<numeroAgenciaDestino>" + transacaoCliente.getNumeroAgenciaDestino() + "</numeroAgenciaDestino>\n\t"
					+ "<numeroContaDestino>" + transacaoCliente.getNumeroContaDestino() + "</numeroContaDestino>\n\t"
					+ "<valor>" + transacaoCliente.getValor() + "</valor>\n"
					+ "</transacao>";
		
		return xmlOutput;
	}


	public String obtemArquivoXMLCliente (TransacaoCliente transacaoCliente) {
		String conteudo = "";
		String path = "";
		
		switch (transacaoCliente.getTipo()){
			case 0: //transacao de login
				try {
					path = basePath + "transacao_login_cliente.xml";
					FileWriter out = new FileWriter(path);
					conteudo = geraTransacaoClienteLogin((TransacaoClienteLogin)transacaoCliente);
					out.write(conteudo);
					out.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
				
				break;
			case 1: //transacao de extrato
				try {
					path = basePath + "transacao_extrato_por_periodo_cliente.xml";
					FileWriter out = new FileWriter(path);
					conteudo = geraTransacaoClienteExtratoPorPeriodo((TransacaoClienteExtratoPorPeriodo)transacaoCliente);
					out.write(conteudo);
					out.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
				break;
			case 2: //transacao de transferencia para o mesmo banco
				try {
					path = basePath + "transacao_transferencia_mesmo_banco_cliente.xml";
					FileWriter out = new FileWriter(path);
					conteudo = geraTransacaoClienteTransferenciaMesmoBanco((TransacaoClienteTransferenciaMesmoBanco)transacaoCliente);
					out.write(conteudo);
					out.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
				break;
			case 3: //transacao de transferencia para outro banco
				try {
					path = basePath + "transacao_transferencia_outro_banco_cliente.xml";
					FileWriter out = new FileWriter(path);
					conteudo = geraTransacaoClienteTransferenciaOutroBanco((TransacaoClienteTransferenciaOutroBanco)transacaoCliente);
					out.write(conteudo);
					out.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
				break;
			case 4: //transacao de pagamento de titulos (boleto)
				try {
					path = basePath + "transacao_pagamento_titulos_cliente.xml";
					FileWriter out = new FileWriter(path);
					conteudo = geraTransacaoClientePagamentoTitulos((TransacaoClientePagamentoTitulos)transacaoCliente);
					out.write(conteudo);
					out.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
				break;
			case 5: //transacao de pagamento de contas de consumo
				try {
					path = basePath + "transacao_pagamento_contas_consumo_cliente.xml";
					FileWriter out = new FileWriter(path);
					conteudo = geraTransacaoClientePagamentoContasConsumo((TransacaoClientePagamentoContasConsumo)transacaoCliente);
					out.write(conteudo);
					out.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
				break;
			case 6: //transacao de consulta de saldo
				try {
					path = basePath + "transacao_saldo_cliente.xml";
					FileWriter out = new FileWriter(path);
					conteudo = geraTransacaoClienteSaldo((TransacaoClienteSaldo)transacaoCliente);
					out.write(conteudo);
					out.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
				break;
		}
		
		
		return path;
	}
	
	//teste com uma transacao de login
	public static void main(String[] args) {
		TransacaoClienteLogin transacaoCliente1 = new TransacaoClienteLogin();
		GeradorTransacaoClienteXML gerador = new GeradorTransacaoClienteXML();
		//DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
        Date date = new Date();
        transacaoCliente1.setData(date);
        transacaoCliente1.setNumeroAgenciaDesteCliente(1);
        transacaoCliente1.setNumeroContaDesteCliente(1);
        transacaoCliente1.setSenha("123123");
        System.out.println(gerador.obtemArquivoXMLCliente(transacaoCliente1));
        TransacaoClienteExtratoPorPeriodo transacaoCliente2 = new TransacaoClienteExtratoPorPeriodo();
        transacaoCliente2.setData(date);
        transacaoCliente2.setNumeroAgenciaDesteCliente(1);
        transacaoCliente2.setNumeroContaDesteCliente(1);
        transacaoCliente2.setDataInicio(date);
        transacaoCliente2.setDataFim(date);
        System.out.println(gerador.obtemArquivoXMLCliente(transacaoCliente2));
        
	}


}